package koby99;

public class J02_Operators {

	// 연산자 operators 
	// 컴퓨터 프로그램은 특정 기능을 수행할 작업들로 구성됨
	// 연산자는 이러한 작업들을 표현하는 기호
	// 작업에는 더하기, 빼기, 곱하기, 나누기
	// 비트 이동 등이 있음
	// 연산자는 한/두/세 개의 피 연산자에서
	// 작업을 수행함
	// 피 연산자 operand는 작업의 대상을 의미
	
		
	public static void main(String[] args) {
		// 1. 단항 연산자 : ++, --, !
		int val1 = 10;
		int val2 = ++ val1; // val1 = val1 + 1; (증가) 즉 val1 에 값을 변경 시키는 것임.
		int val3 = -- val1;  // val1 = val1 - 1; (감소)
		
		boolean isMarried = true; 

		// 2. 산술 연산자 : +, -, *, /, %
		int op1 = 282;
		int op2 = 245;
		int op3 = 123;
		int op4 = 23;
		
		int plus = op1 + op2;
		int sub = op1 - op2;
		int mul = op1 * op2;
	    int div1 = op1 / op2;
	       // 정수를 정수로 나누면 결과도 정수이다
	    double div2 = op1 / (float) op2;
	       // 실수를 정수로 나누면 결과는 실수 [정수를 실수로 나눠도 마찬가지]
	       // 수식의 결과 유형과  그것을 저장하는
	       // 변수의 유형은 일치해야 한다.
	    double div3 = (float) op3 / op4;           // 실수에 형변환에 따라 미세한 오차가 발생 할 수도 있음 [정확할 때엔 사용하지 마러]
	    double div4 = (double) op3 / op4;        // Mate 클래스를 이용하면 오차를 줄일 수 있음   
		int mod = op1 % op2; // % 는 나누고 남는 값이다.
		
		// 3. 관계/동등 연산자 : >, <, >=, <=, ==, !=
		
		boolean rel1 = 100 > 150;
		boolean rel2 = 100 < 150;
		boolean rel3 = 100 >= 150;
		boolean rel4 = 100 <= 150;
		boolean rel5 = op1 == op2;
		boolean rel6 = op3 != op4;
				
		// 4.  조건 연산자 : AND, OR, &&, ||, ? :
		
		boolean cond1 = ( 100 > 150 ) && ( op1 == op2 );
		  // short-cricuit 연산
		  // 조건 연산 처리시 첫째 연산 결과로 의해
		  // 전체 수식의 결과를 바로 알 수 있는 경우
		  // 나머지 항의 수식은 연산하지 않음
		boolean cond2 = ( op1 == op2 ) && ( 100 > 150 );
		boolean cond3 = ( 100 > 150 ) || ( op1 == op2 );
		char cond4 = (op1 == op2) ? '남' : '여';	
		  // 삼항 연산자 ? : 
		  // 형식은 (조건식) ? 참일때 처리 : 거짓일때 처리
		  // &&은 둘다 참일 경우에만 참이고 하나라도 틀리면 거짓이지만
		  // ||은 둘중 하나만 참어도 참이다.
		
		// 5. 대입 연산자 : =, +=, -=, *=, /=, %=
		int assg1 = 100;
		int assg2 = 100;
		int assg3 = 100;
		int assg4 = 100;
		int assg5 = 100;
		
		assg1 += 200;     //assg1 = assg1 + 200; 
		assg2 -= 200;     //assg2 = assg2 - 200;
		assg3 *= 200;     //assg3 = assg3 * 200;
		assg4 /= 75;      //assg4 = assg4 / 75;
		assg5 %= 75;     //assg5 = assg5 % 75;
	    
		  
		
		// 결과출력
		System.out.println( val2 );
		System.out.println( val3 );
		System.out.println( ! isMarried ); // ! 은 반대 즉, not과 같은 녀석이라고 생각함 편하다.
		System.out.println( plus );
		System.out.println( sub );
		System.out.println( mul );
		System.out.println( div1 );
		System.out.println( div2 );
		System.out.println( div3 );
		System.out.println( div4 );
		System.out.println( mod );
		System.out.println( rel1 );
		System.out.println( rel2 );
		System.out.println( rel3 );
		System.out.println( rel4 );
		System.out.println( rel5 );
		System.out.println( rel6 );
		System.out.println( cond1 );
		System.out.println( cond2 );
		System.out.println( cond3 );
		System.out.println( cond4 );
		System.out.println( assg1 );
		System.out.println( assg2 );
		System.out.println( assg3 );
		System.out.println( assg4 );
		System.out.println( assg5 );
		
	}

}
